/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/

package pixy;

import conversion.ProgramConverter;
import conversion.TacConverter;
import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import javax.swing.AbstractButton;
import javax.swing.ButtonModel;
import javax.swing.ImageIcon;

/**
 *
 * @author Mona Nashaat
 */
public class SCATGUI extends javax.swing.JFrame {
    
    /**
     * Creates new form SCATGUI
     */
    public SCATGUI() {
        initComponents();
        
        ImageIcon icon = new ImageIcon(System.getProperty( "user.dir" )+"/imgs/logo-anim.png");
        this.setIconImage(icon.getImage());
        
        MyOptions.pixy_home=new File(System.getProperty( "user.dir" )+"/");
        /*
        try {
        //    UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
        //  UIManager.setLookAndFeel("com.sun.java.swing.plaf.motif.MotifLookAndFeel");
        } catch (ClassNotFoundException ex) {
        Logger.getLogger(SCATGUI.class.getName()).log(Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
        Logger.getLogger(SCATGUI.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
        Logger.getLogger(SCATGUI.class.getName()).log(Level.SEVERE, null, ex);
        } catch (UnsupportedLookAndFeelException ex) {
        Logger.getLogger(SCATGUI.class.getName()).log(Level.SEVERE, null, ex);
        }
        */
    }
    
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        fileChooser = new javax.swing.JFileChooser();
        buttonGroupExportExtension = new javax.swing.ButtonGroup();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        jMenu2 = new javax.swing.JMenu();
        pnlTitle = new javax.swing.JPanel();
        lblDesc = new javax.swing.JLabel();
        lblLogo = new javax.swing.JLabel();
        lblPath = new javax.swing.JLabel();
        txtPath = new javax.swing.JTextField();
        btnChooseFile = new javax.swing.JButton();
        lblChooseVuls = new javax.swing.JLabel();
        chkBxXSS = new javax.swing.JCheckBox();
        chkBxSqlI = new javax.swing.JCheckBox();
        chkBxCmdEx = new javax.swing.JCheckBox();
        chkBxCdI = new javax.swing.JCheckBox();
        chkBxXPI = new javax.swing.JCheckBox();
        lblVisual = new javax.swing.JLabel();
        chkBxPT = new javax.swing.JCheckBox();
        chkBxDGraphs = new javax.swing.JCheckBox();
        radioButtonGif = new javax.swing.JRadioButton();
        radioButtonJPG = new javax.swing.JRadioButton();
        radioButtonPng = new javax.swing.JRadioButton();
        btnSCan = new javax.swing.JButton();
        MainMenuBar = new javax.swing.JMenuBar();
        MenuFile = new javax.swing.JMenu();
        MenuItemPreferences = new javax.swing.JMenuItem();
        MenuItemExit = new javax.swing.JMenuItem();
        MenuAbout = new javax.swing.JMenu();
        MenuItemAbout = new javax.swing.JMenuItem();

        fileChooser.setDialogTitle("Choose PHP File: ");
        fileChooser.setFileFilter(new MyCustomFilter());
        fileChooser.setName("fileChooser"); // NOI18N

        jMenu1.setText("File");
        jMenuBar1.add(jMenu1);

        jMenu2.setText("Edit");
        jMenuBar1.add(jMenu2);

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("SCAT: Static Code Analysis Tool");
        setLocationByPlatform(true);
        setName("SCAT: Static Code Analysis Tool"); // NOI18N
        setPreferredSize(new java.awt.Dimension(600, 410));
        setResizable(false);

        pnlTitle.setBackground(new java.awt.Color(204, 204, 255));
        pnlTitle.setName("pnlTitle"); // NOI18N
        pnlTitle.setLayout(new org.netbeans.lib.awtextra.AbsoluteLayout());

        lblDesc.setFont(new java.awt.Font("Papyrus", 0, 18)); // NOI18N
        lblDesc.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);
        lblDesc.setText("Static Code Analysis Tool");
        lblDesc.setToolTipText("");
        lblDesc.setVerticalAlignment(javax.swing.SwingConstants.BOTTOM);
        lblDesc.setName("TitleSCAT"); // NOI18N
        pnlTitle.add(lblDesc, new org.netbeans.lib.awtextra.AbsoluteConstraints(150, 30, 229, 44));

        lblLogo.setIcon(new javax.swing.ImageIcon("D:\\MyWorkSpace\\SCAT\\imgs\\logo.png")); // NOI18N
        pnlTitle.add(lblLogo, new org.netbeans.lib.awtextra.AbsoluteConstraints(0, 0, -1, -1));

        lblPath.setFont(new java.awt.Font("Verdana", 1, 12)); // NOI18N
        lblPath.setText("Application Path: ");

        txtPath.setEditable(false);

        btnChooseFile.setText("...");
        btnChooseFile.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnChooseFileActionPerformed(evt);
            }
        });

        lblChooseVuls.setFont(new java.awt.Font("Verdana", 1, 12)); // NOI18N
        lblChooseVuls.setText("Choose Vulnerabilities");

        chkBxXSS.setLabel("XSS");
        chkBxXSS.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                chkBxXSSActionPerformed(evt);
            }
        });

        chkBxSqlI.setLabel("SQL Injection");
        chkBxSqlI.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                chkBxSqlIActionPerformed(evt);
            }
        });

        chkBxCmdEx.setLabel("Command Execution");
        chkBxCmdEx.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                chkBxCmdExActionPerformed(evt);
            }
        });

        chkBxCdI.setLabel("Code Injection");
        chkBxCdI.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                chkBxCdIActionPerformed(evt);
            }
        });

        chkBxXPI.setLabel("XPath Injection");
        chkBxXPI.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                chkBxXPIActionPerformed(evt);
            }
        });

        lblVisual.setFont(new java.awt.Font("Verdana", 1, 12)); // NOI18N
        lblVisual.setText("Choose Vulnerabilities");

        chkBxPT.setText("Parse Tree");
        chkBxPT.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                chkBxPTActionPerformed(evt);
            }
        });

        chkBxDGraphs.setLabel("Dependence Graphs");
        chkBxDGraphs.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                chkBxDGraphsActionPerformed(evt);
            }
        });

        buttonGroupExportExtension.add(radioButtonGif);
        radioButtonGif.setLabel("Gif");

        buttonGroupExportExtension.add(radioButtonJPG);
        radioButtonJPG.setSelected(true);
        radioButtonJPG.setLabel("JPEG");

        buttonGroupExportExtension.add(radioButtonPng);
        radioButtonPng.setText("PNG");

        btnSCan.setLabel("Scan");
        btnSCan.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnSCanActionPerformed(evt);
            }
        });

        MenuFile.setText("File");

        MenuItemPreferences.setText("Preferences");
        MenuFile.add(MenuItemPreferences);

        MenuItemExit.setText("Exit");
        MenuItemExit.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                MenuItemExitActionPerformed(evt);
            }
        });
        MenuFile.add(MenuItemExit);

        MainMenuBar.add(MenuFile);

        MenuAbout.setText("About");

        MenuItemAbout.setText("About");
        MenuAbout.add(MenuItemAbout);

        MainMenuBar.add(MenuAbout);

        setJMenuBar(MainMenuBar);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addComponent(pnlTitle, javax.swing.GroupLayout.PREFERRED_SIZE, 600, javax.swing.GroupLayout.PREFERRED_SIZE)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblPath)
                        .addGap(18, 18, 18)
                        .addComponent(txtPath, javax.swing.GroupLayout.PREFERRED_SIZE, 352, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnChooseFile, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lblChooseVuls)
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addComponent(chkBxXSS)
                                    .addComponent(chkBxCmdEx))
                                .addGap(20, 20, 20)
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(chkBxSqlI)
                                        .addGap(45, 45, 45)
                                        .addComponent(chkBxXPI))
                                    .addComponent(chkBxCdI)))
                            .addComponent(chkBxDGraphs)
                            .addGroup(layout.createSequentialGroup()
                                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addComponent(btnSCan, javax.swing.GroupLayout.PREFERRED_SIZE, 107, javax.swing.GroupLayout.PREFERRED_SIZE)
                                    .addGroup(layout.createSequentialGroup()
                                        .addComponent(chkBxPT)
                                        .addGap(65, 65, 65)
                                        .addComponent(radioButtonJPG)))
                                .addGap(18, 18, 18)
                                .addComponent(radioButtonGif)
                                .addGap(18, 18, 18)
                                .addComponent(radioButtonPng))))
                    .addComponent(lblVisual)))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addComponent(pnlTitle, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblPath)
                    .addComponent(txtPath, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnChooseFile))
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(lblChooseVuls))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                            .addComponent(chkBxXSS)
                            .addComponent(chkBxSqlI)
                            .addComponent(chkBxXPI))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(chkBxCdI)
                    .addComponent(chkBxCmdEx))
                .addGap(18, 18, 18)
                .addComponent(lblVisual)
                .addGap(18, 18, 18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(chkBxPT)
                    .addComponent(radioButtonGif)
                    .addComponent(radioButtonJPG)
                    .addComponent(radioButtonPng))
                .addGap(15, 15, 15)
                .addComponent(chkBxDGraphs)
                .addGap(18, 18, 18)
                .addComponent(btnSCan)
                .addContainerGap(43, Short.MAX_VALUE))
        );

        pnlTitle.getAccessibleContext().setAccessibleName("");

        pack();
    }// </editor-fold>//GEN-END:initComponents
    
    private void btnChooseFileActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnChooseFileActionPerformed
        int returnVal = fileChooser.showOpenDialog(this);
        if (returnVal == fileChooser.APPROVE_OPTION) {
            File file = fileChooser.getSelectedFile();
            try {
                // What to do with the file, e.g. display it in a TextArea
                //txtPath.read( new FileReader( file.getAbsolutePath() ), null );
                txtPath.setText(file.getCanonicalPath());
                
            } catch (IOException ex) {
                System.out.println("problem accessing file"+file.getAbsolutePath());
            }
        } else {
            System.out.println("File access cancelled by user.");
        }
    }//GEN-LAST:event_btnChooseFileActionPerformed
    
    private void chkBxXSSActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkBxXSSActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_chkBxXSSActionPerformed
    
    private void chkBxSqlIActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkBxSqlIActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_chkBxSqlIActionPerformed
    
    private void chkBxCmdExActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkBxCmdExActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_chkBxCmdExActionPerformed
    
    private void chkBxCdIActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkBxCdIActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_chkBxCdIActionPerformed
    
    private void chkBxXPIActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkBxXPIActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_chkBxXPIActionPerformed
    
    private void chkBxPTActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkBxPTActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_chkBxPTActionPerformed
    
    private void chkBxDGraphsActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_chkBxDGraphsActionPerformed
        // TODO add your handling code here:
    }//GEN-LAST:event_chkBxDGraphsActionPerformed
    
    private void btnSCanActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSCanActionPerformed
        String fileName =txtPath.getText();
        Checker checker = new Checker(fileName);
        // set boolean options according to command line
        MyOptions.optionA = false;
        MyOptions.option_A = true;
        MyOptions.optionB = false;
        MyOptions.optionC = false;
        MyOptions.optionD = false;
        MyOptions.optionF = false;
        MyOptions.optionG = true;
        MyOptions.optionI = false;
        MyOptions.optionL = false;
        MyOptions.option_L = true;
        MyOptions.optionM = false;
        MyOptions.optionP = true;
        MyOptions.option_P = false;
        MyOptions.optionQ = false;
        MyOptions.optionR = false;
        MyOptions.optionS = "true";
        MyOptions.optionT = false;
        MyOptions.optionW = false;
        MyOptions.optionV = false;
        MyOptions.option_V = true;
        String s="";
        s="xss:sql:xpath:cmdexec:codeeval:";
        if (chkBxXSS.isSelected()){
            MyOptions.option_XSS=true;
            s+="xss:";
        }
        if(chkBxSqlI.isSelected())
        {
            MyOptions.option_SQLI=true;
            
        }
        if(chkBxXPI.isSelected())
        {
            MyOptions.option_XPath=true;
            
        }
        if(chkBxCmdEx.isSelected())
        {
            MyOptions.option_CMD=true;
            
        }
        if(chkBxCdI.isSelected())
        {
            MyOptions.option_CDEX=true;
            
        }
        if(s.length()>1)
        {
            s=s.substring(0, s.length()-1);
        }
        // inform MyOptions about the analyses that are to be performed
        if (MyOptions.setAnalyses(s) == false) {
            Utils.bail("Invalid 'y' argument");
        }
        MyOptions.option_VPS=chkBxPT.isSelected();
        if (MyOptions.option_VPS){
            MyOptions.option_Extension="gif";
            for (Enumeration<AbstractButton> buttons = buttonGroupExportExtension.getElements(); buttons.hasMoreElements();) {
                AbstractButton button = buttons.nextElement();
                
                if (button.isSelected()) {
                    //MyOptions.option_Extension=button.getText();
                }
            }
        }
        if(chkBxDGraphs.isSelected()){
            MyOptions.option_VXSS=true;
            MyOptions.option_VSQL=true;
            MyOptions.option_VXP=true;
            MyOptions.option_VCExec=true;
            MyOptions.option_VCEval=true;
        }
        else {
            MyOptions.option_VXSS=false;
            MyOptions.option_VSQL=false;
            MyOptions.option_VXP=false;
            MyOptions.option_VCExec=false;
            MyOptions.option_VCEval=false;
        }
        
        MyOptions.graphPath = MyOptions.pixy_home + "/graphs";
        
        // create / empty the graphs directory
        File graphPathFile = new File(MyOptions.graphPath);
        graphPathFile.mkdir();
        for (File file : graphPathFile.listFiles()) {
            file.delete();
        }
        
        if (!MyOptions.optionW) {
            if (MyOptions.optionB) {
                System.out.println("File: " + Utils.basename(fileName));
            } else {
                System.out.println("File: " + fileName);
            }
        }
        MyOptions.option_OH=true;
        MyOptions.outputHtmlPath=MyOptions.pixy_home + "/Reports";
        // create / empty the output directory
        File outputHtmlPathFile = new File(MyOptions.outputHtmlPath);
        outputHtmlPathFile.mkdir();
        for (File file : outputHtmlPathFile.listFiles()) {
            file.delete();
        }
        //		MyOptions.option_OH=cmd.hasOption("OH");
        long startTime = System.currentTimeMillis();
        
        // convert the whole program (with file inclusions)
        ProgramConverter pcv = checker.initialize();
        TacConverter tac = pcv.getTac();
        
        
        
        checker.analyzeTaint(tac, !MyOptions.optionA);
        
        if (!MyOptions.optionB) {
            long analysisEndTime = System.currentTimeMillis();
            long analysisDiffTime = (analysisEndTime - startTime) / 1000;
            System.out.println();
            System.out.println("Time: " + analysisDiffTime + " seconds");
        }
        
        //checker.taintAnalysis.stats();
        // System.out.println("Taint Analysis Size: " + checker.taintAnalysis.size());
        
        // we don't need these any more:
        checker.literalAnalysis = null;
        checker.aliasAnalysis = null;
        
        // we don't need these either;
        // EFF: perhaps using weak references would be better;
        // don't do the following, or you will get a NullPointerException in ExTaint.create()
        /*
        ExTaintSet.repos = null;
        ExTaint.repos = null;
        */
        
        //checker.xssTaintAnalysis.info();
        //provokeOutOfMemory();
        
        // detect vulnerabilities
        System.out.println("\n*** detecting vulnerabilities ***\n");
        checker.gta.detectVulns();
        
        //System.out.println("done!");
        if (!MyOptions.optionB) {
            long endTime = System.currentTimeMillis();
            long diffTime = (endTime - startTime) / 1000;
            System.out.println("Total Time: " + diffTime + " seconds");
            System.out.println();
            System.out.println();
        }
        
        // QUERY
        /*
        if (checker.optionQ) {
        QueryClient queryClient = new QueryClient(checker.taintAnalysis, pcv.getAllFiles(), tac);
        queryClient.start();
        }
        */
    }//GEN-LAST:event_btnSCanActionPerformed
    
    private void MenuItemExitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_MenuItemExitActionPerformed
        System.exit(0);
    }//GEN-LAST:event_MenuItemExitActionPerformed
    
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
        * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html
        */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(SCATGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(SCATGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(SCATGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(SCATGUI.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>
        
        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new SCATGUI().setVisible(true);
            }
        });
    }
    
    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JMenuBar MainMenuBar;
    private javax.swing.JMenu MenuAbout;
    private javax.swing.JMenu MenuFile;
    private javax.swing.JMenuItem MenuItemAbout;
    private javax.swing.JMenuItem MenuItemExit;
    private javax.swing.JMenuItem MenuItemPreferences;
    private javax.swing.JButton btnChooseFile;
    private javax.swing.JButton btnSCan;
    private javax.swing.ButtonGroup buttonGroupExportExtension;
    private javax.swing.JCheckBox chkBxCdI;
    private javax.swing.JCheckBox chkBxCmdEx;
    private javax.swing.JCheckBox chkBxDGraphs;
    private javax.swing.JCheckBox chkBxPT;
    private javax.swing.JCheckBox chkBxSqlI;
    private javax.swing.JCheckBox chkBxXPI;
    private javax.swing.JCheckBox chkBxXSS;
    private javax.swing.JFileChooser fileChooser;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenu jMenu2;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JLabel lblChooseVuls;
    private javax.swing.JLabel lblDesc;
    private javax.swing.JLabel lblLogo;
    private javax.swing.JLabel lblPath;
    private javax.swing.JLabel lblVisual;
    private javax.swing.JPanel pnlTitle;
    private javax.swing.JRadioButton radioButtonGif;
    private javax.swing.JRadioButton radioButtonJPG;
    private javax.swing.JRadioButton radioButtonPng;
    private javax.swing.JTextField txtPath;
    // End of variables declaration//GEN-END:variables
}
